<?php
class Osztaly extends AppModel {

	var $name = 'Osztaly';
	var $validate = array(
		'nev' => array('rule' => 'alphaNumeric'),
		'ev' => array('rule' => array('custom', '/\d{0,4}/')),
		'kod' => array('rule' => 'alphaNumeric')
	);

	//The Associations below have been created with all possible keys, those that are not needed can be removed
	var $hasMany = array(
			'Bizonylat' => array('className' => 'Bizonylat',
								'foreignKey' => 'osztaly_id',
								'dependent' => false,
								'conditions' => '',
								'fields' => '',
								'order' => '',
								'limit' => '',
								'offset' => '',
								'exclusive' => '',
								'finderQuery' => '',
								'counterQuery' => ''
			)
	);

	var $hasAndBelongsToMany = array(
			'Gyujto' => array('className' => 'Gyujto',
						'joinTable' => 'gyujtok_osztalyok',
						'foreignKey' => 'osztaly_id',
						'associationForeignKey' => 'gyujto_id',
						'unique' => true,
						'conditions' => '',
						'fields' => '',
						'order' => '',
						'limit' => '',
						'offset' => '',
						'finderQuery' => '',
						'deleteQuery' => '',
						'insertQuery' => ''
			),
			'User' => array('className' => 'User',
						'joinTable' => 'osztalyok_users',
						'foreignKey' => 'osztaly_id',
						'associationForeignKey' => 'user_id',
						'unique' => true,
						'conditions' => '',
						'fields' => '',
						'order' => '',
						'limit' => '',
						'offset' => '',
						'finderQuery' => '',
						'deleteQuery' => '',
						'insertQuery' => ''
			)
		);
	
	function beforeFind($queryData){
		if(isset($queryData['conditions']['GyujtoOsztaly.gyujto_id'])){
			$this->unbindModel(array('hasMany' => array('Bizonylat'), 'hasAndBelongsToMany' => array('User', 'Gyujto')));
			$this->bindModel(array('hasOne' => array(
												'GyujtoOsztaly' => array(
																	'foreignKey' => false,
																	'type' => 'INNER',
																	'conditions' => array('GyujtoOsztaly.osztaly_id = Osztaly.id')
																	),
												'Gyujto' => array(
																	'foreignKey' => false,
																	'type' => 'INNER',
																	'conditions' => array(
																						'Gyujto.id = GyujtoOsztaly.gyujto_id',
																						'Gyujto.id' => $queryData['conditions']['GyujtoOsztaly.gyujto_id']
																						)
																)
												)
							));
		}
	}
	
/* Adott céghez tartozó összes osztály lekérdezése
 *
 * @param array $params
 * 					ev			melyik évben keresgéljünk
 * 					cegId		melyik cégben keresgéljünk
 * @return array a keresett osztályok
*/	
	function getAllInCeg($params){
		if(!$params['ev'] || !$params['cegId'])
			throw new NotImplementedException('Hiányzik az Osztaly->getAllInCeg hívásnál az év vagy a cegId!');
		$o = $this->find('all',
						array(
							'conditions' => array(
												'Osztaly.ev' => $params['ev'],
												'GyujtoOsztaly.gyujto_id' => $params['cegId']
												),
							'order' => array('Osztaly.nev')));
		if($o){
			foreach($o as $oszt){
				$osztaly[$oszt['Osztaly']['id']] = $oszt['Osztaly']['nev'];
			}
			return $osztaly;
		}
		else{
			return false;
		}
	}

/*
* View létrehozása
*/	
	function createView($osztalyId){
		$sql = 'CREATE VIEW v_osztaly'.$osztalyId.'_tetelek AS (
					SELECT tetelek. *
					FROM `tetelek` , `bizonylatok` , `osztalyok` , gyujtok_osztalyok, gyujtok
					WHERE `tetelek`.`bizonylat_id` = `bizonylatok`.`id`
					AND `osztalyok`.`id` = `bizonylatok`.`osztaly_id`
					AND `osztalyok`.`id` = '.$osztalyId.'
					AND `gyujtok_osztalyok`.`gyujto_id` = `gyujtok`.`id`
					AND `gyujtok_osztalyok`.`osztaly_id` = `osztalyok`.`id`)';
		return($this->query($sql));
	}

/* osztály id kikeresése osztálykód, év és cégId alapján
 *
 * @param int $osztalyKod az osztály kódja
 * @param array $params
 * 					ev			melyik évben keresgéljünk
 * 					cegId		melyik cégben keresgéljünk
 * @return int a keresett osztály id-je vagy false ha nincs
*/	
	function getOsztalyId($osztalyKod, $params){
		//debug($params);
		if(!$params['ev'] || !$params['cegId'])
			throw new NotImplementedException('Hiányzik az Osztaly->getOsztalyId hívásnál az év vagy a cegId!');

		$o = $this->find('first',
									array(
										'fields' => array('id'),
										'conditions' => array(
																'Osztaly.kod' => $osztalyKod,
																'Osztaly.ev' => $params['ev'],
																'GyujtoOsztaly.gyujto_id' => $params['cegId']
																)
									)
							  );
		if($o){
			return $o['Osztaly']['id'];
		}
		else
			return false;
	}

/* osztály név kikeresése osztályId alapján
 *
 * @param int $osztalyId az osztály id-je
 * @return string a keresett osztály neve vagy false ha nincs
*/	
	function getNev($osztalyId){
		$this->unbindModel(array('hasMany' => array('Bizonylat'), 'hasAndBelongsToMany' => array('User', 'Gyujto')));
		$o = $this->find('first',
						array(
							'fields' => array('nev'),
							'conditions' => array(
													'Osztaly.id' => $osztalyId,
													)
						)
							  );
		if($o){
			return $o['Osztaly']['nev'];
		}
		else
			return false;
	}

}
?>